home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / applications / databases / fbase106.lha / FBase / FBaseSrc.lha / FBase.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-07-09  |  28.3 KB  |  837 lines

  1. /* $Revision Header *** Header built automatically - do not edit! ***********
  2.  *
  3.  *    (C) Copyright 1993 by Amit Fridman
  4.  *
  5.  *    Name .....: FBase.c
  6.  *    Created ..: Tuesday 14-Dec-93 11:41:37
  7.  *    Revision .: 5
  8.  *
  9.  *    Date        Author                 Comment
  10.  *    =========   ====================   ====================
  11.  *    13-May-94   Amit Fridman           v1.05 Preliminary release
  12.  *    15-Apr-94   Amit Fridman           v1.04 Beta version complete
  13.  *    24-Mar-94   Amit Fridman           v1.03 Added Keys
  14.  *    24-Feb-94   Amit Fridman           v1.02
  15.  *    07-Jan-94   Amit Fridman           v1.01
  16.  *    14-Dec-93   Amit Fridman           Created this file!
  17.  *
  18.  * $Revision Header ********************************************************/
  19. #define REVISION    5
  20.  
  21. /* FBase user interface */
  22.  
  23. #include "FBase.h"
  24. #include "Protos.h"
  25.  
  26. LONG __stack = 8192;
  27.  
  28. #define VSPACER(x) MUI_NewObject(MUIC_Rectangle,MUIA_HorizWeight,0,MUIA_VertWeight,x,TAG_DONE)
  29. #define KeyButtonH(name,key,node)\
  30.     TextObject,\
  31.         ButtonFrame,\
  32.         MUIA_Text_Contents, name,\
  33.         MUIA_Text_PreParse, "\33c",\
  34.         MUIA_Text_HiChar  , key,\
  35.         MUIA_ControlChar  , key,\
  36.         MUIA_InputMode    , MUIV_InputMode_RelVerify,\
  37.         MUIA_Background   , MUII_ButtonBack,\
  38.         MUIA_HelpNode     , node,\
  39.         End
  40.  
  41. enum {
  42.    ID_DUMMY,
  43.    ID_NEW,ID_OPEN,ID_SAVE,ID_SAVEAS,ID_PRINT_ALL,ID_PRINT_TITLES,ID_ABOUT,
  44.    ID_READ,ID_VIEW,ID_EDIT,ID_KILL,
  45.    ID_FIND,
  46.    ID_KEYS,
  47.    ID_DISK,
  48.    ID_DELETE,ID_RENAME,ID_REMARK,ID_RKEYS,ID_CONTENTS_OK,ID_CONTENTS_CANCEL,
  49.    ID_VIEW_SELECT,ID_VIEW_CANCEL,
  50.    ID_FINFO_CANCEL,
  51.    ID_RENAME_OK,ID_RENAME_CANCEL,
  52.    ID_REMARK_OK,ID_REMARK_CANCEL,
  53.    ID_MATCH,ID_SET_KEYS,ID_MATCH_OK,ID_MATCH_CANCEL,
  54.    ID_FILES_SELECT,ID_FILES_CANCEL,
  55.    ID_KEYS_ADD,ID_KEYS_DEL,ID_KEYS_NAME,ID_KEYS_CHANGE,ID_KEYS_OK,ID_KEYS_CANCEL,
  56.    ID_KS_STOD,ID_KS_DTOS,ID_KS_CANCEL,
  57.    ID_RK_STOD,ID_RK_DTOS,ID_RK_OK,ID_RK_CANCEL,
  58.    ID_PRINT_CONTENTS,ID_PRINT_MATCH,ID_PRINT_FINFO,
  59. };
  60.  
  61. struct NewMenu FBase_Menu[] =
  62. {
  63.    {NM_TITLE,"Project"    ,NULL,0,0,NULL},
  64.    {NM_ITEM ,"New"        ,"N" ,0,0,(APTR)ID_NEW},
  65.    {NM_ITEM ,"Open ..."   ,"O" ,0,0,(APTR)ID_OPEN},
  66.    {NM_ITEM , NM_BARLABEL ,NULL,0,0,NULL},
  67.    {NM_ITEM ,"Save"       ,"S" ,0,0,(APTR)ID_SAVE},
  68.    {NM_ITEM ,"SaveAs ..." ,NULL,0,0,(APTR)ID_SAVEAS},
  69.    {NM_ITEM , NM_BARLABEL ,NULL,0,0,NULL},
  70.    {NM_ITEM ,"Print"      ,NULL,0,0,NULL},
  71.    {NM_SUB  ,"All"        ,"P" ,0,0,(APTR)ID_PRINT_ALL},
  72.    {NM_SUB  ,"Titles"     ,"T" ,0,0,(APTR)ID_PRINT_TITLES},
  73.    {NM_ITEM , NM_BARLABEL ,NULL,0,0,NULL},
  74.    {NM_ITEM ,"About"      ,NULL,0,0,(APTR)ID_ABOUT},
  75.    {NM_ITEM ,"Quit"       ,"Q" ,0,0,(APTR)MUIV_Application_ReturnID_Quit},
  76.    {NM_TITLE,"Action"     ,NULL,0,0,NULL},
  77.    {NM_ITEM ,"Read Floppy","R" ,0,0,(APTR)ID_READ},
  78.    {NM_ITEM , NM_BARLABEL ,NULL,0,0,NULL},
  79.    {NM_ITEM ,"View Floppy","V" ,0,0,(APTR)ID_VIEW},
  80.    {NM_ITEM ,"Edit Floppy","E" ,0,0,(APTR)ID_EDIT},
  81.    {NM_ITEM ,"Kill Floppy",NULL,0,0,(APTR)ID_KILL},
  82.    {NM_ITEM , NM_BARLABEL ,NULL,0,0,NULL},
  83.    {NM_ITEM ,"Find ..."   ,"F" ,0,0,(APTR)ID_FIND},
  84.    {NM_ITEM ,"Keys ..."   ,"Y" ,0,0,(APTR)ID_KEYS},
  85.    {NM_END  ,NULL         ,NULL,0,0,NULL}
  86. };
  87.  
  88. struct NewMenu Contents_Menu[] =
  89. {
  90.    {NM_TITLE,"Project",NULL,0,0,NULL},
  91.    {NM_ITEM ,"Print"  ,"P" ,0,0,(APTR)ID_PRINT_CONTENTS},
  92.    {NM_TITLE,"Action" ,NULL,0,0,NULL},
  93.    {NM_ITEM ,"Delete" ,"D" ,0,0,(APTR)ID_DELETE},
  94.    {NM_ITEM ,"Rename" ,"R" ,0,0,(APTR)ID_RENAME},
  95.    {NM_ITEM ,"Remark" ,"M" ,0,0,(APTR)ID_REMARK},
  96.    {NM_ITEM ,"Keys"   ,"K" ,0,0,(APTR)ID_RKEYS},
  97.    {NM_END  ,NULL     ,NULL,0,0,NULL}
  98. };
  99.  
  100. struct NewMenu Match_Menu[] =
  101. {
  102.    {NM_TITLE,"Project",NULL,0,0,NULL},
  103.    {NM_ITEM ,"Print"  ,"P" ,0,0,(APTR)ID_PRINT_MATCH},
  104.    {NM_END  ,NULL     ,NULL,0,0,NULL}
  105. };
  106.  
  107. struct NewMenu FInfo_Menu[] =
  108. {
  109.    {NM_TITLE,"Project",NULL,0,0,NULL},
  110.    {NM_ITEM ,"Print"  ,"P" ,0,0,(APTR)ID_PRINT_FINFO},
  111.    {NM_END  ,NULL     ,NULL,0,0,NULL}
  112. };
  113.  
  114.  
  115. extern struct List FloppyList;
  116.  
  117. struct Library *MUIMasterBase;
  118. Object *App;
  119. Object *WI_Main,*WI_Contents,*WI_View,*WI_Rename,*WI_Remark,*WI_Match;
  120. Object *WI_Files,*WI_Keys,*WI_KeySearch,*WI_RecKeys,*WI_FileInfo;
  121. Object *LV_Floppies,*LV_Contents,*LV_View,*LV_Files,*LV_FileKeys;
  122. Object *LV_Keys,*LV_KSSrc,*LV_KSDest,*LV_RKSrc,*LV_RKDest;
  123. Object *BT_Read,*BT_View,*BT_Edit,*BT_Kill,*BT_Find,*BT_Keys;
  124. Object *BT_Delete,*BT_Rename,*BT_Remark,*BT_RKeys,*BT_ConOK,*BT_ConCancel;
  125. Object *BT_KeySearch,*BT_MatchOK,*BT_MatchCancel;
  126. Object *BT_KeysAdd,*BT_KeysDel,*BT_KSSToD,*BT_KSDToS,*BT_RKSToD,*BT_RKDToS;
  127. Object *BT_RKOK,*BT_RKCancel;
  128. Object *BT_KeysOK,*BT_KeysCancel;
  129. Object *ST_Rename,*ST_Remark,*ST_Match,*ST_KeyName;
  130. Object *CM_Case,*CM_Dirs,*CM_Keys,*CM_KeyAnd;
  131. Object *CY_Disks;
  132. Object *TX_FileName,*TX_FileSize,*TX_FileRem;
  133. BOOL    DataChanged=FALSE;
  134. char   *CY_Labels[32];
  135.  
  136.  
  137. SAVEDS ASM long floppydispfunc(REG(a0) struct Hook *hook,REG(a2) char **array,REG(a1) FLOPPY *Floppy)
  138. {
  139.    static char tx[80];
  140.  
  141.    sprintf(tx,"\33b%s:",Floppy->HeadRecord->FName);
  142.    *array=tx;
  143.    return(0);
  144. }
  145.  
  146. static struct Hook FloppyDisplayHook = {
  147.    {NULL,NULL},
  148.    (void *)floppydispfunc,
  149.    NULL,NULL
  150. };
  151.  
  152. SAVEDS ASM long floppycmpfunc(REG(a0) struct Hook *hook,REG(a1) FLOPPY *f1,REG(a2) FLOPPY *f2)
  153. {
  154.    return(stricmp(f1->HeadRecord->FName,f2->HeadRecord->FName));
  155. }
  156.  
  157. static struct Hook FloppyCompareHook = {
  158.    {NULL, NULL},
  159.    (void *)floppycmpfunc,
  160.    NULL, NULL
  161. };
  162.  
  163. SAVEDS ASM long contentsdispfunc(REG(a0) struct Hook *hook,REG(a2) char **array,REG(a1) RECORD *Record)
  164. {
  165.    static char tx[108],len[10],buf[108];
  166.    static char space[]="                    ";
  167.  
  168.    strncpy(tx,space,Record->Depth);
  169.    tx[Record->Depth]=0;
  170.    if (Record->Flags & RECORD_DIRECTORY) {
  171.       sprintf(buf,"\33b%s",Record->FName);
  172.       if (Record->Flags & RECORD_ROOT)
  173.          strcpy(len,"\33b[root]");
  174.       else
  175.          strcpy(len,"\33b[dir]");
  176.    } else {
  177.       sprintf(buf,"%s",Record->FName);
  178.       sprintf(len,"%ld",Record->Size);
  179.    }
  180.    strcat(tx,buf);
  181.    *array++=tx;
  182.    *array=len;
  183.    return(0);
  184. }
  185.  
  186. static struct Hook ContentsDisplayHook = {
  187.    {NULL,NULL},
  188.    (void *)contentsdispfunc,
  189.    NULL,NULL
  190. };
  191.  
  192. SAVEDS ASM long contentsmultifunc(REG(a1) RECORD *Record)
  193. {
  194.    if (Record->Flags & RECORD_DIRECTORY)
  195.       return(FALSE);
  196.    else
  197.       return(TRUE);
  198. }
  199.  
  200. static struct Hook ContentsMultiHook = {
  201.    {NULL,NULL},
  202.    (void *)contentsmultifunc,
  203.    NULL,NULL
  204. };
  205.  
  206. SAVEDS ASM long filesdispfunc(REG(a0) struct Hook *hook,REG(a2) char **array,REG(a1) RECORD *Record)
  207. {
  208.    static char  tx[108],len[10];
  209.  
  210.    BuildName(Record,tx);
  211.    if (Record->Flags & RECORD_DIRECTORY)
  212.       len[0]=0;
  213.    else
  214.       sprintf(len,"%ld",Record->Size);
  215.    *array++=tx;
  216.    *array=len;
  217.    return(0);
  218. }
  219.  
  220. static struct Hook FilesDisplayHook = {
  221.    {NULL,NULL},
  222.    (void *)filesdispfunc,
  223.    NULL,NULL
  224. };
  225.  
  226.  
  227. int CXBRK(void) { return(0); }
  228. int _CXBRK(void) { return(0); }
  229. void chkabort(void) {}
  230.  
  231. static void fail(APTR app,char *str)
  232. {
  233.    if (app)
  234.       MUI_DisposeObject(app);
  235.  
  236.    if (MUIMasterBase)
  237.       CloseLibrary(MUIMasterBase);
  238.  
  239.    if (str) {
  240.       puts(str);
  241.       exit(20);
  242.    }
  243.    exit(0);
  244. }
  245.  
  246.  
  247. void main(int argc, char *argv[])
  248. {
  249.    BOOL  running=TRUE;
  250.    ULONG signal;
  251.  
  252.    if (!(MUIMasterBase=OpenLibrary(MUIMASTER_NAME,MUIMASTER_VMIN)))
  253.       fail(NULL,"Failed to open "MUIMASTER_NAME".");
  254.  
  255.    myStartup();
  256.  
  257.    App=ApplicationObject,
  258.       MUIA_Application_Title        ,"FBase",
  259.       MUIA_Application_Version      ,"$VER: FBase 1.06 (09.07.94)",
  260.       MUIA_Application_Copyright    ,"c1994, Amit Fridman",
  261.       MUIA_Application_Author       ,"Amit Fridman",
  262.       MUIA_Application_Description  ,"Floppy contents database.",
  263.       MUIA_Application_Base         ,"FBASE",
  264.       MUIA_HelpFile                 ,"PROGDIR:FBase.guide",
  265.       MUIA_HelpNode                 ,"MAIN",
  266.       SubWindow,WI_Main=WindowObject,
  267.          MUIA_Window_ID    ,MAKE_ID('M','A','I','N'),
  268.          MUIA_Window_Title ,"FBase",
  269.          MUIA_Window_Menu  ,FBase_Menu,
  270.          MUIA_HelpNode     ,"MAIN_WINDOW",
  271.          WindowContents,HGroup,
  272.             Child,LV_Floppies=ListviewObject,
  273.                MUIA_Listview_MultiSelect,TRUE,
  274.                MUIA_Listview_List,ListObject,
  275.                   InputListFrame,
  276.                   MUIA_List_DisplayHook,&FloppyDisplayHook,
  277.                   MUIA_List_CompareHook,&FloppyCompareHook,
  278.                End,
  279.                MUIA_HorizWeight,90,
  280.             End,
  281.             Child,VGroup,
  282.                Child,VGroup,
  283.                   GroupFrame,
  284.                   Child,BT_Read=  KeyButtonH("Read",'r',"DO_READ"),
  285.                End,
  286.                Child,VSPACER(20),
  287.                Child,VGroup,
  288.                   GroupFrame,
  289.                   Child,BT_View=KeyButtonH("View",'v',"DO_VIEW"),
  290.                   Child,BT_Edit=KeyButtonH("Edit",'e',"DO_EDIT"),
  291.                   Child,BT_Kill=KeyButtonH("Kill",'k',"DO_KILL"),
  292.                End,
  293.                Child,VSPACER(20),
  294.                Child,VGroup,
  295.                   GroupFrame,
  296.                   Child,BT_Find=KeyButtonH("Find",'f',"DO_FIND"),
  297.                   Child,BT_Keys=KeyButtonH("Keys",'y',"DO_KEYS"),
  298.                End,
  299.                Child,VSPACER(60),
  300.                Child,VGroup,
  301.                   GroupFrame,
  302.                   Child,CY_Disks=Cycle(CY_Labels),
  303.                End,
  304.                MUIA_HorizWeight,10,
  305.             End,
  306.          End,
  307.       End,
  308.       SubWindow,WI_Contents=WindowObject,
  309.          MUIA_Window_ID    ,MAKE_ID('C','N','T','S'),
  310.          MUIA_Window_Title ,"Edit Window",
  311.          MUIA_Window_Menu  ,Contents_Menu,
  312.          MUIA_Window_Width ,MUIV_Window_Width_MinMax(50),
  313.          MUIA_HelpNode     ,"FLOPPY_CONTENTS",
  314.          WindowContents,HGroup,
  315.             Child,LV_Contents=ListviewObject,
  316.                MUIA_Listview_MultiSelect,TRUE,
  317.                MUIA_Listview_List,ListObject,
  318.                   InputListFrame,
  319.                   MUIA_List_DisplayHook,&ContentsDisplayHook,
  320.                   MUIA_List_MultiTestHook,&ContentsMultiHook,
  321.                   MUIA_List_Format,"MAW=100,P=\33r",
  322.                End,
  323.                MUIA_HorizWeight,90,
  324.             End,
  325.             Child,VGroup,
  326.                Child,VGroup,
  327.                   GroupFrame,
  328.                   Child,BT_Delete   =KeyButtonH("Delete",'d',"DO_DELETE"),
  329.                   Child,BT_Rename   =KeyButtonH("Rename",'r',"DO_RENAME"),
  330.                   Child,BT_Remark   =KeyButtonH("Remark",'m',"DO_REMARK"),
  331.                End,
  332.                Child,VSpace(0),
  333.                Child,VGroup,
  334.                   GroupFrame,
  335.                   Child,BT_RKeys    =KeyButtonH("Keys",'k',"DO_RECORD_KEYS"),
  336.                End,
  337.                Child,VSpace(0),
  338.                Child,VGroup,
  339.                   GroupFrame,
  340.                   Child,BT_ConOK    =SimpleButton("OK"),
  341.                   Child,BT_ConCancel=SimpleButton("Cancel"),
  342.                End,
  343.                MUIA_HorizWeight,10,
  344.             End,
  345.          End,
  346.       End,
  347.       SubWindow,WI_View=WindowObject,
  348.          MUIA_Window_ID    ,MAKE_ID('V','I','E','W'),
  349.          MUIA_Window_Title ,"View Window",
  350.          MUIA_Window_Menu  ,Contents_Menu,
  351.          MUIA_Window_Width ,MUIV_Window_Width_MinMax(50),
  352.          MUIA_HelpNode     ,"FLOPPY_CONTENTS",
  353.          WindowContents,HGroup,
  354.             Child,LV_View=ListviewObject,
  355.                MUIA_Listview_List,ListObject,
  356.                   InputListFrame,
  357.                   MUIA_List_DisplayHook,&ContentsDisplayHook,
  358.                   MUIA_List_Format,"MAW=100,P=\33r",
  359.                End,
  360.             End,
  361.          End,
  362.       End,
  363.       SubWindow,WI_FileInfo=WindowObject,
  364.          MUIA_Window_ID    ,MAKE_ID('F','I','N','F'),
  365.          MUIA_Window_Title ,"File Info",
  366.          MUIA_Window_Menu  ,FInfo_Menu,
  367.          MUIA_Window_Width ,MUIV_Window_Width_MinMax(50),
  368.          MUIA_HelpNode     ,"FINFO_WINDOW",
  369.          WindowContents,VGroup,
  370.             Child,VGroup,
  371.                GroupFrameT("General"),
  372.                Child,TX_FileName=TextObject,MUIA_Text_Contents,NULL,End,
  373.                Child,TX_FileSize=TextObject,MUIA_Text_Contents,NULL,End,
  374.                Child,TX_FileRem =TextObject,MUIA_Text_Contents,NULL,End,
  375.             End,
  376.             Child,HGroup,
  377.                GroupFrameT("Keys"),
  378.                Child,LV_FileKeys=ListviewObject,
  379.                   MUIA_Listview_Input,FALSE,
  380.                   MUIA_Listview_List,ListObject,
  381.                      ReadListFrame,
  382.                   End,
  383.                End,
  384.             End,
  385.          End,
  386.       End,
  387.       SubWindow,WI_Rename=WindowObject,
  388.          MUIA_Window_ID    ,MAKE_ID('R','E','N','M'),
  389.          MUIA_Window_Title ,"Rename",
  390.          MUIA_Window_Menu  ,MUIV_Window_Menu_NoMenu,
  391.          MUIA_Window_Width ,MUIV_Window_Width_MinMax(30),
  392.          WindowContents,VGroup,
  393.             Child,ST_Rename=String("",31),
  394.          End,
  395.       End,
  396.       SubWindow,WI_Remark=WindowObject,
  397.          MUIA_Window_ID    ,MAKE_ID('R','E','M','K'),
  398.          MUIA_Window_Title ,"Remark",
  399.          MUIA_Window_Menu  ,MUIV_Window_Menu_NoMenu,
  400.          MUIA_Window_Width ,MUIV_Window_Width_MinMax(50),
  401.          WindowContents,VGroup,
  402.             Child,ST_Remark=String("",80),
  403.          End,
  404.       End,
  405.       SubWindow,WI_Match=WindowObject,
  406.          MUIA_Window_ID    ,MAKE_ID('F','I','N','D'),
  407.          MUIA_Window_Title ,"Find",
  408.          MUIA_Window_Menu  ,MUIV_Window_Menu_NoMenu,
  409.          MUIA_Window_Width ,MUIV_Window_Width_MinMax(30),
  410.          MUIA_HelpNode     ,"FIND_WINDOW",
  411.          WindowContents,VGroup,
  412.             Child,ST_Match=String("",63),
  413.             Child,HGroup,
  414.                Child,VGroup,
  415.                   GroupFrameT("Flags"),
  416.                   Child,HGroup,
  417.                      Child,KeyLabel1(" Ignore Case",'c'),
  418.                      Child,CM_Case=KeyCheckMark(TRUE,'c'),
  419.                   End,
  420.                   Child,HGroup,
  421.                      Child,KeyLabel1("Include Dirs",'d'),
  422.                      Child,CM_Dirs=KeyCheckMark(FALSE,'d'),
  423.                   End,
  424.                End,
  425.                Child,HSpace(16),
  426.                Child,VGroup,
  427.                   GroupFrameT("Keys"),
  428.                   Child,BT_KeySearch=KeyButtonH("Set Keys",'s',"SET_KEYS"),
  429.                   Child,HGroup,
  430.                      Child,KeyLabel1("Match Keys",'k'),
  431.                      Child,CM_Keys=KeyCheckMark(FALSE,'k'),
  432.                   End,
  433.                   Child,HGroup,
  434.                      Child,KeyLabel1("  And Keys",'a'),
  435.                      Child,CM_KeyAnd=KeyCheckMark(FALSE,'a'),
  436.                   End,
  437.                End,
  438.             End,
  439.             Child,VSpace(8),
  440.             Child,HGroup,
  441.                MUIA_Group_SameWidth,TRUE,
  442.                Child,BT_MatchOK    =SimpleButton("OK"),
  443.                Child,BT_MatchCancel=SimpleButton("CANCEL"),
  444.             End,
  445.          End,
  446.       End,
  447.       SubWindow,WI_Files=WindowObject,
  448.          MUIA_Window_ID    ,MAKE_ID('F','I','L','I'),
  449.          MUIA_Window_Title ,"Find List",
  450.          MUIA_Window_Menu  ,Match_Menu,
  451.          MUIA_Window_Width ,MUIV_Window_Width_MinMax(50),
  452.          MUIA_HelpNode     ,"FIND_LIST",
  453.          WindowContents,LV_Files=ListviewObject,
  454.             MUIA_Listview_List,ListObject,
  455.                InputListFrame,
  456.                MUIA_List_DisplayHook,&FilesDisplayHook,
  457.                MUIA_List_Format,"MAW=100,P=\33r",
  458.             End,
  459.          End,
  460.       End,
  461.       SubWindow,WI_Keys=WindowObject,
  462.          MUIA_Window_ID    ,MAKE_ID('K','E','Y','S'),
  463.          MUIA_Window_Title ,"Keys",
  464.          MUIA_Window_Menu  ,MUIV_Window_Menu_NoMenu,
  465.          MUIA_Window_Width ,MUIV_Window_Width_MinMax(20),
  466.          MUIA_HelpNode     ,"KEYS_WINDOW",
  467.          WindowContents,VGroup,
  468.             Child,LV_Keys=ListviewObject,
  469.                MUIA_Listview_List,ListObject,
  470.                   InputListFrame,
  471.                End,
  472.             End,
  473.             Child,ST_KeyName=StringObject,
  474.                StringFrame,
  475.                MUIA_String_MaxLen,MAXKEYLEN-1,
  476.                MUIA_String_Contents,"",
  477.             End,
  478.             Child,HGroup,
  479.                Child,BT_KeysAdd=KeyButton("Add",'a'),
  480.                Child,BT_KeysDel=KeyButton("Del",'d'),
  481.             End,
  482.             Child,VSpace(8),
  483.             Child,HGroup,
  484.                MUIA_Group_SameWidth,TRUE,
  485.                Child,BT_KeysOK    =SimpleButton("OK"),
  486.                Child,BT_KeysCancel=SimpleButton("CANCEL"),
  487.             End,
  488.          End,
  489.       End,
  490.       SubWindow,WI_KeySearch=WindowObject,
  491.          MUIA_Window_ID    ,MAKE_ID('S','K','E','Y'),
  492.          MUIA_Window_Title ,"Search Keys",
  493.          MUIA_Window_Menu  ,MUIV_Window_Menu_NoMenu,
  494.          MUIA_Window_Width ,MUIV_Window_Width_MinMax(20),
  495.          MUIA_HelpNode     ,"SKEYS_WINDOW",
  496.          WindowContents,HGroup,
  497.             Child,VGroup,
  498.                GroupFrameT("Key List"),
  499.                Child,LV_KSSrc=ListviewObject,
  500.                   MUIA_Listview_MultiSelect,TRUE,
  501.                   MUIA_Listview_List,ListObject,
  502.                      InputListFrame,
  503.                   End,
  504.                End,
  505.                Child,BT_KSSToD=KeyButton("-->",'>'),
  506.             End,
  507.             Child,VGroup,
  508.                GroupFrameT("Search on"),
  509.                Child,LV_KSDest=ListviewObject,
  510.                   MUIA_Listview_MultiSelect,TRUE,
  511.                   MUIA_Listview_List,ListObject,
  512.                      InputListFrame,
  513.                   End,
  514.                End,
  515.                Child,BT_KSDToS=KeyButton("<--",'<'),
  516.             End,
  517.          End,
  518.       End,
  519.       SubWindow,WI_RecKeys=WindowObject,
  520.          MUIA_Window_ID    ,MAKE_ID('R','K','E','Y'),
  521.          MUIA_Window_Title ,"Record Keys",
  522.          MUIA_Window_Menu  ,MUIV_Window_Menu_NoMenu,
  523.          MUIA_Window_Width ,MUIV_Window_Width_MinMax(20),
  524.          MUIA_HelpNode     ,"RKEYS_WINDOW",
  525.          WindowContents,VGroup,
  526.             Child,HGroup,
  527.                Child,VGroup,
  528.                   GroupFrameT("Key List"),
  529.                   Child,LV_RKSrc=ListviewObject,
  530.                      MUIA_Listview_MultiSelect,TRUE,
  531.                      MUIA_Listview_List,ListObject,
  532.                         InputListFrame,
  533.                      End,
  534.                   End,
  535.                   Child,BT_RKSToD=KeyButton("-->",'>'),
  536.                End,
  537.                Child,VGroup,
  538.                   GroupFrameT("Record Keys"),
  539.                   Child,LV_RKDest=ListviewObject,
  540.                      MUIA_Listview_MultiSelect,TRUE,
  541.                      MUIA_Listview_List,ListObject,
  542.                         InputListFrame,
  543.                      End,
  544.                   End,
  545.                   Child,BT_RKDToS=KeyButton("<--",'<'),
  546.                End,
  547.             End,
  548.             Child,VSpace(8),
  549.             Child,HGroup,
  550.                MUIA_Group_SameWidth,TRUE,
  551.                Child,BT_RKOK    =SimpleButton("OK"),
  552.                Child,BT_RKCancel=SimpleButton("CANCEL"),
  553.             End,
  554.          End,
  555.       End,
  556.    End;
  557.  
  558.    if (!App)
  559.       fail(App,"failed to create application.");
  560.  
  561.    DoMethod(WI_Main,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
  562.             MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  563.    DoMethod(BT_Read,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  564.             MUIM_Application_ReturnID,ID_READ);
  565.    DoMethod(BT_View,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  566.             MUIM_Application_ReturnID,ID_VIEW);
  567.    DoMethod(BT_Edit,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  568.             MUIM_Application_ReturnID,ID_EDIT);
  569.    DoMethod(BT_Kill,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  570.             MUIM_Application_ReturnID,ID_KILL);
  571.    DoMethod(BT_Find,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  572.             MUIM_Application_ReturnID,ID_FIND);
  573.    DoMethod(BT_Keys,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  574.             MUIM_Application_ReturnID,ID_KEYS);
  575.    DoMethod(LV_Floppies,MUIM_Notify,MUIA_Listview_DoubleClick,TRUE,App,2,
  576.             MUIM_Application_ReturnID,ID_VIEW);
  577.  
  578.    DoMethod(WI_Contents,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
  579.             MUIM_Application_ReturnID,ID_CONTENTS_CANCEL);
  580.    DoMethod(BT_Delete,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  581.             MUIM_Application_ReturnID,ID_DELETE);
  582.    DoMethod(BT_Rename,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  583.             MUIM_Application_ReturnID,ID_RENAME);
  584.    DoMethod(BT_Remark,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  585.             MUIM_Application_ReturnID,ID_REMARK);
  586.    DoMethod(BT_RKeys,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  587.             MUIM_Application_ReturnID,ID_RKEYS);
  588.    DoMethod(BT_ConOK,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  589.             MUIM_Application_ReturnID,ID_CONTENTS_OK);
  590.    DoMethod(BT_ConCancel,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  591.             MUIM_Application_ReturnID,ID_CONTENTS_CANCEL);
  592.  
  593.    DoMethod(WI_View,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
  594.             MUIM_Application_ReturnID,ID_VIEW_CANCEL);
  595.    DoMethod(LV_View,MUIM_Notify,MUIA_Listview_DoubleClick,TRUE,App,2,
  596.             MUIM_Application_ReturnID,ID_VIEW_SELECT);
  597.  
  598.    DoMethod(WI_FileInfo,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
  599.             MUIM_Application_ReturnID,ID_FINFO_CANCEL);
  600.  
  601.    DoMethod(WI_Rename,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
  602.             MUIM_Application_ReturnID,ID_RENAME_CANCEL);
  603.    DoMethod(ST_Rename,MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime,
  604.             App,2,MUIM_Application_ReturnID,ID_RENAME_OK);
  605.  
  606.    DoMethod(WI_Remark,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
  607.             MUIM_Application_ReturnID,ID_REMARK_CANCEL);
  608.    DoMethod(ST_Remark,MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime,
  609.             App,2,MUIM_Application_ReturnID,ID_REMARK_OK);
  610.  
  611.    DoMethod(WI_Match,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
  612.             MUIM_Application_ReturnID,ID_MATCH_CANCEL);
  613.    DoMethod(ST_Match,MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime,
  614.             WI_Match,3,MUIM_Set,MUIA_Window_ActiveObject,BT_MatchOK);
  615.    DoMethod(BT_KeySearch,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  616.             MUIM_Application_ReturnID,ID_SET_KEYS);
  617.    DoMethod(BT_MatchOK,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  618.             MUIM_Application_ReturnID,ID_MATCH_OK);
  619.    DoMethod(BT_MatchCancel,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  620.             MUIM_Application_ReturnID,ID_MATCH_CANCEL);
  621.  
  622.    DoMethod(WI_Files,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
  623.             MUIM_Application_ReturnID,ID_FILES_CANCEL);
  624.    DoMethod(LV_Files,MUIM_Notify,MUIA_Listview_DoubleClick,TRUE,App,2,
  625.             MUIM_Application_ReturnID,ID_FILES_SELECT);
  626.  
  627.    DoMethod(WI_Keys,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
  628.             MUIM_Application_ReturnID,ID_KEYS_CANCEL);
  629.    DoMethod(BT_KeysAdd,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  630.             MUIM_Application_ReturnID,ID_KEYS_ADD);
  631.    DoMethod(BT_KeysDel,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  632.             MUIM_Application_ReturnID,ID_KEYS_DEL);
  633.    DoMethod(ST_KeyName,MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime,
  634.             App,2,MUIM_Application_ReturnID,ID_KEYS_NAME);
  635.    DoMethod(LV_Keys,MUIM_Notify,MUIA_List_Active,MUIV_EveryTime,
  636.             App,2,MUIM_Application_ReturnID,ID_KEYS_CHANGE);
  637.    DoMethod(BT_KeysOK,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  638.             MUIM_Application_ReturnID,ID_KEYS_OK);
  639.    DoMethod(BT_KeysCancel,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  640.             MUIM_Application_ReturnID,ID_KEYS_CANCEL);
  641.  
  642.    DoMethod(WI_KeySearch,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
  643.             MUIM_Application_ReturnID,ID_KS_CANCEL);
  644.    DoMethod(BT_KSSToD,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  645.             MUIM_Application_ReturnID,ID_KS_STOD);
  646.    DoMethod(BT_KSDToS,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  647.             MUIM_Application_ReturnID,ID_KS_DTOS);
  648.  
  649.    DoMethod(WI_RecKeys,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,App,2,
  650.             MUIM_Application_ReturnID,ID_RK_CANCEL);
  651.    DoMethod(BT_RKSToD,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  652.             MUIM_Application_ReturnID,ID_RK_STOD);
  653.    DoMethod(BT_RKDToS,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  654.             MUIM_Application_ReturnID,ID_RK_DTOS);
  655.    DoMethod(BT_RKOK,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  656.             MUIM_Application_ReturnID,ID_RK_OK);
  657.    DoMethod(BT_RKCancel,MUIM_Notify,MUIA_Pressed,FALSE,App,2,
  658.             MUIM_Application_ReturnID,ID_RK_CANCEL);
  659.  
  660.    DoMethod(WI_Main,MUIM_Window_SetCycleChain,LV_Floppies,BT_Read,
  661.             BT_View,BT_Edit,BT_Kill,BT_Find,BT_Keys,CY_Disks,NULL);
  662.    DoMethod(WI_Contents,MUIM_Window_SetCycleChain,LV_Contents,
  663.             BT_Delete,BT_Rename,BT_Remark,BT_RKeys,
  664.             BT_ConOK,BT_ConCancel,NULL);
  665.    DoMethod(WI_View,MUIM_Window_SetCycleChain,LV_View,NULL);
  666.    DoMethod(WI_Match,MUIM_Window_SetCycleChain,ST_Match,CM_Case,CM_Dirs,
  667.             BT_KeySearch,CM_Keys,CM_KeyAnd,BT_MatchOK,BT_MatchCancel,NULL);
  668.    DoMethod(WI_Files,MUIM_Window_SetCycleChain,LV_Files,NULL);
  669.    DoMethod(WI_Keys,MUIM_Window_SetCycleChain,LV_Keys,ST_KeyName,
  670.             BT_KeysAdd,BT_KeysDel,BT_KeysOK,BT_KeysCancel,NULL);
  671.    DoMethod(WI_KeySearch,MUIM_Window_SetCycleChain,LV_KSSrc,BT_KSSToD,
  672.             LV_KSDest,BT_KSDToS,NULL);
  673.    DoMethod(WI_RecKeys,MUIM_Window_SetCycleChain,LV_RKSrc,BT_RKSToD,
  674.             LV_RKDest,BT_RKDToS,BT_RKOK,BT_RKCancel,NULL);
  675.  
  676.    set(WI_Main,MUIA_Window_Open,TRUE);
  677.  
  678.    while (running) {
  679.       switch (DoMethod(App,MUIM_Application_Input,&signal)) {
  680.          case MUIV_Application_ReturnID_Quit:
  681.             if ((DataChanged) && (FloppyList.lh_Head->ln_Succ)) {
  682.                if (ConfirmQuit())
  683.                   running=FALSE;
  684.             } else
  685.                running=FALSE;
  686.             break;
  687.          case ID_NEW:
  688.             DoNew();
  689.             break;
  690.          case ID_OPEN:
  691.             DoLoad();
  692.             break;
  693.          case ID_SAVE:
  694.             DoSave();
  695.             break;
  696.          case ID_SAVEAS:
  697.             DoSaveAs();
  698.             break;
  699.          case ID_PRINT_ALL:
  700.             DoPrintAll();
  701.             break;
  702.          case ID_PRINT_TITLES:
  703.             DoPrintTitles();
  704.             break;
  705.          case ID_ABOUT:
  706.             DoAbout();
  707.             break;
  708.          case ID_READ:
  709.             DoReadFloppy();
  710.             break;
  711.          case ID_VIEW:
  712.             DoViewFloppy();
  713.             break;
  714.          case ID_EDIT:
  715.             DoEditFloppy();
  716.             break;
  717.          case ID_KILL:
  718.             DoKillFloppy();
  719.             break;
  720.          case ID_FIND:
  721.             DoFind();
  722.             break;
  723.          case ID_KEYS:
  724.             DoKeys();
  725.             break;
  726.          case ID_DELETE:
  727.             DoDeleteRecord();
  728.             break;
  729.          case ID_RENAME:
  730.             DoRenameRecord();
  731.             break;
  732.          case ID_REMARK:
  733.             DoRemark();
  734.             break;
  735.          case ID_RKEYS:
  736.             DoRecordKeys();
  737.             break;
  738.          case ID_PRINT_CONTENTS:
  739.             DoPrintContents();
  740.             break;
  741.          case ID_CONTENTS_OK:
  742.             DoAddFloppy();
  743.             break;
  744.          case ID_CONTENTS_CANCEL:
  745.             DoNoAddFloppy();
  746.             break;
  747.          case ID_VIEW_SELECT:
  748.             DisplayFileInfo(WI_View,LV_View);
  749.             break;
  750.          case ID_VIEW_CANCEL:
  751.             StopView();
  752.             break;
  753.          case ID_PRINT_FINFO:
  754.             DoPrintFInfo();
  755.             break;
  756.          case ID_FINFO_CANCEL:
  757.             StopFileInfo();
  758.             break;
  759.          case ID_RENAME_OK:
  760.             DoNewName();
  761.             break;
  762.          case ID_RENAME_CANCEL:
  763.             DoNoNewName();
  764.             break;
  765.          case ID_REMARK_OK:
  766.             SetRemark();
  767.             break;
  768.          case ID_REMARK_CANCEL:
  769.             StopRemark();
  770.             break;
  771.          case ID_SET_KEYS:
  772.             DoKeySearch();
  773.             break;
  774.          case ID_PRINT_MATCH:
  775.             DoPrintMatch();
  776.             break;
  777.          case ID_MATCH_OK:
  778.             DoMatch();
  779.             break;
  780.          case ID_MATCH_CANCEL:
  781.             DoNoMatch();
  782.             break;
  783.          case ID_FILES_SELECT:
  784.             DisplayFileInfo(WI_Files,LV_Files);
  785.             break;
  786.          case ID_FILES_CANCEL:
  787.             FileDispClose();
  788.             break;
  789.          case ID_KEYS_ADD:
  790.             DoAddKey();
  791.             break;
  792.          case ID_KEYS_DEL:
  793.             DoDelKey();
  794.             break;
  795.          case ID_KEYS_NAME:
  796.             DoNameKey();
  797.             break;
  798.          case ID_KEYS_CHANGE:
  799.             DoKeysChange();
  800.             break;
  801.          case ID_KEYS_OK:
  802.             KeysAccept();
  803.             break;
  804.          case ID_KEYS_CANCEL:
  805.             KeysClose();
  806.             break;
  807.          case ID_KS_STOD:
  808.             KeySearchSToD();
  809.             break;
  810.          case ID_KS_DTOS:
  811.             KeySearchDToS();
  812.             break;
  813.          case ID_KS_CANCEL:
  814.             KeySearchClose();
  815.             break;
  816.          case ID_RK_STOD:
  817.             RecordKeysSToD();
  818.             break;
  819.          case ID_RK_DTOS:
  820.             RecordKeysDToS();
  821.             break;
  822.          case ID_RK_OK:
  823.             RecordKeysAccept();
  824.             break;
  825.          case ID_RK_CANCEL:
  826.             RecordKeysClose();
  827.             break;
  828.       }
  829.       if (running && signal)
  830.          Wait(signal);
  831.    }
  832.  
  833.    myCleanup();
  834.  
  835.    fail(App,NULL);
  836. }
  837.